home *** CD-ROM | disk | FTP | other *** search
/ Workbench Design / WB Collection.iso / datatypes / dfadt / source / dfadt_support.c < prev    next >
C/C++ Source or Header  |  1996-04-07  |  4KB  |  171 lines

  1.  
  2. #include "all_includes.h"
  3. #include "dfadt.h"
  4.  
  5. LONG    OFFSETS[] = 
  6. {
  7.     (int) & ((struct Address *)NULL)->as_Data.ad_Salutation >> 2,
  8.     (int) & ((struct Address *)NULL)->as_Data.ad_FirstName >> 2,
  9.     (int) & ((struct Address *)NULL)->as_Data.ad_Name >> 2,
  10.     (int) & ((struct Address *)NULL)->as_Data.ad_Street >> 2,
  11.     (int) & ((struct Address *)NULL)->as_Data.ad_CO >> 2,
  12.     (int) & ((struct Address *)NULL)->as_Data.ad_ZIP >> 2,
  13.     (int) & ((struct Address *)NULL)->as_Data.ad_City >> 2,
  14.     (int) & ((struct Address *)NULL)->as_Data.ad_State >> 2,
  15.     (int) & ((struct Address *)NULL)->as_Data.ad_Country >> 2,
  16.     (int) & ((struct Address *)NULL)->as_Data.ad_Birthday >> 2,
  17.     (int) & ((struct Address *)NULL)->as_Data.ad_Phone >> 2,
  18.     (int) & ((struct Address *)NULL)->as_Data.ad_Fax >> 2,
  19.     (int) & ((struct Address *)NULL)->as_Data.ad_EMail1 >> 2,
  20.     (int) & ((struct Address *)NULL)->as_Data.ad_EMail2 >> 2,
  21.     (int) & ((struct Address *)NULL)->as_Data.ad_EMail3 >> 2,
  22.     (int) & ((struct Address *)NULL)->as_Data.ad_Comment >> 2,
  23.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[0] >> 2,
  24.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[1] >> 2,
  25.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[2] >> 2,
  26.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[3] >> 2,
  27.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[4] >> 2,
  28.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[5] >> 2,
  29.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[6] >> 2,
  30.     (int)&((struct Address *)NULL)->as_Data.ad_Groups[7] >> 2,
  31.     (int)&((struct Address *)NULL)->as_Data.ad_Selected >> 2,
  32.     (int)&((struct Address *)NULL)->as_Data.ad_External 
  33. >> 2};
  34.  
  35.  
  36. struct Address * __saveds dfadt_addnode
  37. (
  38.     struct DDTData    * dd
  39. )
  40. {
  41.     struct Address    * tmp;
  42.     LONG            size;
  43.  
  44.     size = sizeof(struct Address);
  45.  
  46.     if (tmp = (struct Address *)AllocPooled(dd->ddt_Pool, size))
  47.     {
  48.         tmp->as_Node.ln_Succ    = NULL;
  49.         tmp->as_Node.ln_Pred    = NULL;
  50.         tmp->as_Node.ln_Type    = NT_UNKNOWN;
  51.         tmp->as_Node.ln_Pri        = 0;
  52.  
  53.             // Notice: The following line is not really needed,
  54.             //         as we don't step through the list.
  55.  
  56.         AddTail(&(dd->ddt_List),(struct Node*)tmp);
  57.  
  58.         return(tmp);
  59.     }
  60.  
  61.     return (NULL);
  62. }
  63.  
  64. long __saveds dfadt_setentry
  65. (
  66.     struct DDTData    * dd,
  67.     struct Address    * adr,
  68.     long            id,
  69.     void            * contents
  70. )
  71. {
  72.     char            * item    = NULL;
  73.  
  74.     long            err        = 0L;
  75.     long            slen    = 0L;
  76.  
  77.     switch (id)
  78.     {
  79.         case ITEMOFFSET_SALUTATION:
  80.         case ITEMOFFSET_FIRSTNAME:
  81.         case ITEMOFFSET_NAME:
  82.         case ITEMOFFSET_STREET:
  83.         case ITEMOFFSET_CO:
  84.         case ITEMOFFSET_ZIP:
  85.         case ITEMOFFSET_CITY:
  86.         case ITEMOFFSET_STATE:
  87.         case ITEMOFFSET_COUNTRY:
  88.         case ITEMOFFSET_BIRTHDAY:
  89.         case ITEMOFFSET_PHONE:
  90.         case ITEMOFFSET_FAX:
  91.         case ITEMOFFSET_EMAIL1:
  92.         case ITEMOFFSET_EMAIL2:
  93.         case ITEMOFFSET_EMAIL3:
  94.         case ITEMOFFSET_COMMENT:
  95.         case ITEMOFFSET_EXTERNAL:
  96.  
  97.             item        = ((char **)adr)[OFFSETS[id]];
  98.  
  99.             if (contents && ( ((UBYTE *) contents)[0]))
  100.             {
  101.  
  102.                 if ( ((char **)adr)[OFFSETS[id]] )
  103.                 {
  104.                     if ( strcmp(((char **)adr)[OFFSETS[id]] , contents))
  105.                     {
  106.  
  107.                         slen = strlen (((char **)adr)[OFFSETS[id]]) + 1;
  108.  
  109.                         FreePooled( dd->ddt_Pool, ((char **)adr)[OFFSETS[id]], slen);
  110.  
  111.  
  112.                         slen = strlen ( contents ) + 1;
  113.  
  114.                         if (((char **)adr)[OFFSETS[id]] = AllocPooled ( dd->ddt_Pool, slen))
  115.                         {
  116.                             CopyMem(contents, ((char **)adr)[OFFSETS[id]],  slen);
  117.                         }
  118.                         else
  119.                             err = 10;
  120.                     }
  121.                 }
  122.                 else
  123.                 {
  124.                     slen = strlen ( contents ) + 1;
  125.  
  126.                     if (((char **)adr)[OFFSETS[id]] = AllocPooled ( dd->ddt_Pool, slen))
  127.                     {
  128.                         CopyMem(contents, ((char **)adr)[OFFSETS[id]],  slen);
  129.                     }
  130.                     else
  131.                         err = 10;
  132.                 }
  133.             }
  134.             else
  135.             {
  136.  
  137.                 if ( ((char **)adr)[OFFSETS[id]] )
  138.                 {
  139.                     slen = strlen (((char **)adr)[OFFSETS[id]]) + 1;
  140.  
  141.                     FreePooled( dd->ddt_Pool, ((char **)adr)[OFFSETS[id]], slen);
  142.  
  143.                     ((char **)adr)[OFFSETS[id]] = NULL;
  144.                 }
  145.             }
  146.  
  147.             break;
  148.  
  149.         /* -------------------------------------------------------------- */
  150.  
  151.         case ITEMOFFSET_GROUP1:
  152.         case ITEMOFFSET_GROUP2:
  153.         case ITEMOFFSET_GROUP3:
  154.         case ITEMOFFSET_GROUP4:
  155.         case ITEMOFFSET_GROUP5:
  156.         case ITEMOFFSET_GROUP6:
  157.         case ITEMOFFSET_GROUP7:
  158.         case ITEMOFFSET_GROUP8:
  159.         case ITEMOFFSET_SELECTED:
  160.  
  161.             item        = (char * )(& ((char **)adr)[OFFSETS[id]]);
  162.  
  163.             *((long *) item) = (LONG) contents;
  164.  
  165.             break;
  166.  
  167.     }
  168.  
  169.     return(err);
  170. }
  171.